﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.DirectoryServices;

namespace Modulo.Seguridad.Base
{
    public partial class WFAUsuarios : TDV.Controles.Base.WinForm.BaseForm_Tipo01
    {
        public WFAUsuarios()
        {
            InitializeComponent();
        }
        private string dominio = "";
        private void ChkValidar_CheckedChanged(object sender, EventArgs e)
        {
            if (ChkValidar.Checked)
            {
                TxtNombres.Enabled = false;
                TxtEmail.Enabled = false;
            }
            else
            {
                TxtNombres.Enabled = true;
                TxtEmail.Enabled = true;
            }
        }

        private void WFAUsuarios_Load(object sender, EventArgs e)
        {
            this.KeyPreview = true;
            TsbEliminar.Enabled = false;
            TsbGuardar.Enabled = false;
            TxtLogin.CharacterCasing = CharacterCasing.Upper;
            Cargar();
            CargarPerfil();

           // ChkValidar.Checked = true;
            TxtNombres.Enabled = true;
            TxtEmail.Enabled = true;
        }
        protected void Cargar()
        {
            GrdUsuarios.DataSource = null;
            LBUsuarios user = new LBUsuarios();
            user.Buscar();
            if (user.Count > 0)
            {
                BS.DataSource = user;
                GrdUsuarios.DataSource = BS;
                BS.ResetBindings(false);
                TsbEliminar.Enabled = true;
            }
            else
            {
                TsbEliminar.Enabled = false;
            }

          //  BarraMensaje.Text = "Se encontraron (" + GrdUsuarios.Rows.Count.ToString() + ") registros";

            //BarraMensaje.Text = "Se encontraron (" + GrdUsuarios.Rows.Count.ToString() + ") registros";

        }
        protected void CargarPerfil()
        {
            LBPerfil perf = new LBPerfil();
            perf.Buscar();
            if (perf.Count > 0)
            {
              CboPerfiles.ValueMember = "Codigo";
              CboPerfiles.DisplayMember = "Descripcion";
              CboPerfiles.DataSource = perf;
            }
        }

        private void TsbSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void TsbModificar_Click(object sender, EventArgs e)
        {
            if (GrdUsuarios.CurrentRow.Index > -1)
            {
                EBUsuario usuario = (EBUsuario)GrdUsuarios.CurrentRow.DataBoundItem;
                WFUsuarios_Edit usr = new WFUsuarios_Edit(usuario);
                if (usr.ShowDialog() == DialogResult.OK)
                {
                    Cargar();
                }
            }
        }

        private void TsbGuardar_Click(object sender, EventArgs e)
        {
            ControlError.SetError(TxtLogin, "");
            if (string.IsNullOrEmpty(TxtLogin.Text))
            {
                ControlError.SetError(TxtLogin, "Ingrese un Login");
                return;
            }

            ControlError.SetError(TxtNombres, "");
            if(string.IsNullOrEmpty(TxtNombres.Text))
            {
            ControlError.SetError(TxtNombres,"Ingrese un Nombre");
                return;
            }
            //LblComprobar.Text = "";
            try
            {
                //Validar si el usuario ya existe en la tabla Oracle
                LBUsuarios valusuario = new LBUsuarios();
                valusuario.Filtros.Login = TxtLogin.Text;
                valusuario.Buscar();
                if (valusuario.Count > 0)
                {
                    MessageBox.Show("El usuario [ " + TxtLogin.Text + " ] ya existe en los registros");
                    return;
                }

                EBUsuario user = new EBUsuario();
                user.Login = TxtLogin.Text;
                user.Nombres = TxtNombres.Text;
                user.Email = TxtEmail.Text;
                user.Observacion = TxtObservaciones.Text;
                user.CodigoPerfil = CboPerfiles.SelectedValue.ToString();
                user.Grabar();
                Cargar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void TxtLogin_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (TxtLogin.Text.Length > 0)
            {
                if (TsbGuardar.Enabled != true)
                {
                    TsbGuardar.Enabled = true;
                }
            }
            if (e.KeyChar == 13)
            {
                CargarAD();
            }
        }
        public static DirectoryEntry GetDirectoryEntry()
        {
            DirectoryEntry de = new DirectoryEntry();
            de.Path = "LDAP://" + Environment.UserDomainName.ToString() + "";
            de.AuthenticationType = AuthenticationTypes.Secure;
            return de;
        }
        protected void CargarAD()
        {

            DirectorySearcher searcher = null;
            try
            {

                System.DirectoryServices.DirectoryEntry dir = new System.DirectoryServices.DirectoryEntry("LDAP://" + Environment.UserDomainName.ToString() + "");
                searcher = new DirectorySearcher();
                searcher.SearchRoot = dir;
                searcher.Filter = "(samaccountname=" +TxtLogin.Text + ")";// "(&(objectClass=user))";
                searcher.SearchScope = SearchScope.Subtree;
                SearchResultCollection results = searcher.FindAll();

                if (results != null)
                {
                    TxtEmail.Text = "";
                    TxtNombres.Text = "";
                    // por cada usuario encontrado
                    foreach (SearchResult result in results)
                    {
                        DirectoryEntry user = null;
                        try
                        {
                            // abrimos la entrada AD al usuario correspondiente
                            user = result.GetDirectoryEntry();
                            if (user != null)
                            { // escribimos datos del usuario en la consola
                                if (user.Properties["GivenName"].Value == null && user.Properties["Sn"].Value == null)
                                {
                                    TxtNombres.Text = "";
                                }
                                else
                                {
                                    string Nombre = user.Properties["GivenName"].Value == null ? "" : user.Properties["GivenName"].Value.ToString();
                                    string Apellido = user.Properties["Sn"].Value == null ? "" : user.Properties["Sn"].Value.ToString();
                                    TxtNombres.Text = Nombre + " " + Apellido; // 
                                }

                                if (user.Properties["mail"].Value == null)
                                {
                                    TxtEmail.Text = "";
                                }
                                else
                                {
                                    TxtEmail.Text = user.Properties["mail"].Value.ToString();
                                }
                            }
                        }
                        finally
                        {
                            if (user != null)
                                user.Dispose();
                        }
                    }
                }
                else
                {
                    throw new ApplicationException("No se pudo abrir el directorio activo.");

                }
            }
            finally
            {
                if (searcher != null)
                    searcher.Dispose();
            }
        }

        private void TxtEmail_TextChanged(object sender, EventArgs e)
        {

        }

        private void baseLabel3_Click(object sender, EventArgs e)
        {

        }

        private void TsbEliminar_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Desea realmente eliminar el registro?", "Información", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
            {
                try
                {
                    EBUsuario usuario = new EBUsuario();
                    usuario.Login = GrdUsuarios.CurrentRow.Cells[0].Value.ToString();
                    usuario.Eliminar();
                    Cargar();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void TsTxtLogin_KeyUp(object sender, KeyEventArgs e)
        {
            if (TsTxtLogin.Text.Length > 0)
            {
                LBUsuarios user = new LBUsuarios();
                user.Filtros.Login = TsTxtLogin.Text;
                user.LIKE();
                BS.DataSource = user;
                //GrdUsuarios.DataSource = BS;
                BS.ResetBindings(false);
            }
        }

        private void TsNombres_KeyUp(object sender, KeyEventArgs e)
        {
            if (TsNombres.Text.Length > 0)
            {
                LBUsuarios user = new LBUsuarios();
                user.Filtros.Nombres = TsNombres.Text;
                user.BuscaNombres();
                BS.DataSource = user;
                BS.ResetBindings(false);
            }
        }
    }
}
